home *** CD-ROM | disk | FTP | other *** search
/ Quick PC 61 / Quick PC 61.iso / I386 / IPP_UTIL.IN_ / ipp_util.inc
Encoding:
Text File  |  2003-02-21  |  13.4 KB  |  391 lines

  1. <%
  2. '------------------------------------------------------------
  3. '
  4. ' Microsoft Internet Printing Project
  5. '
  6. ' Copyright (c) Microsoft Corporation. All rights reserved.
  7. '
  8. '------------------------------------------------------------
  9. %>
  10.  
  11. <%
  12.  
  13. ' Replace EN-US with localized language code. E.g. "HE" -- Hebrew.
  14. Const L_Language            = "EN-US"
  15.  
  16. Const L_DocumentList_Text   = "Document List"
  17. Const L_DerivedFont_Text    = " face=""Tahoma, Verdana, Arial, MS Sans Serif"" "
  18. Const L_DoubleDevFont_Text  = " face=""""Tahoma, Verdana, Arial, MS Sans Serif"""" "
  19.  
  20. Const PROGID_CLIENT_HELPER  = "OlePrn.PrinterURL"
  21. Const PROGID_SNMP           = "OlePrn.OleSNMP"
  22. Const PROGID_HELPER         = "OlePrn.AspHelp"
  23. Const PROGID_CONVERTER      = "OlePrn.OleCvt"
  24. Const PROGID_ADDPRINTER     = "OlePrn.AddPrint"
  25. Const VIEW_EQUALS           = "&view="
  26. Const ONCLICK_EQUALS        = " onclick="
  27. Const QUOTE                 = """"
  28. Const QUEUE_VIEW            = "ipp_0007.asp"
  29. Const PROPERTY_VIEW         = "ipp_0006.asp"
  30. Const UNAUTHORIZED_401      = "401 Unauthorized"
  31. Const FAXDRIVER             = "Microsoft Shared Fax Driver"
  32.  
  33. Const COMPUTER              = "MS_Computer"
  34. Const LOCAL_SERVER          = "MS_LocalServer"
  35. Const DHTML_ENABLED         = "MS_DHTMLEnabled"
  36. Const DEFAULT_PAGE          = "MS_DefaultPage"
  37. Const PRINTER               = "MS_Printer"
  38. Const URLPRINTER            = "MS_URLPrinter"
  39. Const SNMP                  = "MS_SNMP"
  40. Const IPADDRESS             = "MS_IPAddress"
  41. Const COMMUNITY             = "MS_Community"
  42. Const DEVICE                = "MS_Device"
  43. Const PORTNAME              = "MS_Portname"
  44. Const MODEL                 = "MS_Model"
  45. Const ASP1                  = "MS_ASP1"
  46. Const CONNECT               = "showconnect"
  47. Const ATPRINTER             = "&MS_Printer="
  48. Const ATURLPRINTER          = "&MS_URLPrinter="
  49. Const ATSNMP                = "&MS_SNMP="
  50. Const ATIPADDRESS           = "&MS_IPAddress="
  51. Const ATCOMMUNITY           = "&MS_Community="
  52. Const ATDEVICE              = "&MS_Device="
  53. Const ATPORTNAME            = "&MS_Portname="
  54. Const ATMODEL               = "&MS_Model="
  55. Const ATASP1                = "&MS_ASP1="
  56. Const ATPAGE                = "&page="
  57. Const ATCONNECT             = "&showconnect="
  58.  
  59. Dim   DEF_FONT, DEF_BASEFONT_TAG, DEF_FONT_TAG, LARGE_FONT_TAG, MENU_FONT_TAG
  60. Dim   SUBMENU_FONT, SUBMENU_FONT_TAG, CLIENT_FONT, DEF_DOUBLEFONT, DEF_DOUBLEFONT_TAG
  61.  
  62. DEF_FONT                    = L_DerivedFont_Text
  63. DEF_DOUBLEFONT              = L_DoubleDevFont_Text
  64. DEF_BASEFONT_TAG            = "<basefont  " & L_DerivedFont_Text & " size=2>"
  65. DEF_FONT_TAG                = "<font " & L_DerivedFont_Text & " size=2>"
  66. LARGE_FONT_TAG              = "<font " & L_DerivedFont_Text & " size=4>"
  67. MENU_FONT_TAG               = "<font " & L_DerivedFont_Text & " size=2 color=white>"
  68. SUBMENU_FONT                = L_DerivedFont_Text & " size=1 "
  69. SUBMENU_FONT_TAG            = "<font " & L_DerivedFont_Text & " size=2>"
  70. CLIENT_FONT                 = "<font " & L_DerivedFont_Text & ">"
  71. Const END_FONT              = "</font>"
  72.  
  73. Dim OleCvt
  74. Set OleCvt = Server.CreateObject (PROGID_CONVERTER)
  75. Session.Codepage = 65001
  76.  
  77. Function Write (strUnicode)
  78.     Write = strUnicode
  79. End Function
  80.  
  81. Function SubstituteString(strIn, strPattern, strReplacement)
  82.     Dim iStrPos
  83.  
  84.     iStrPos = InStr(strIn,strPattern)
  85.     SubstituteString = Left(strIn, iStrPos-1) & strReplacement & Mid(strIn, iStrPos + Len(strPattern))
  86. End Function
  87.  
  88. Function RepString1( strIn, strRep )
  89.     RepString1 = SubStituteString( strIn, "%1", strRep)
  90. End Function
  91.  
  92. Function RepString2( strIn, strRep1, strRep2 )
  93.     RepString2 = SubStituteString( RepString1(strIn, strRep1) , "%2", strRep2)
  94. End Function
  95.  
  96. Function RepString3( strIn, strRep1, strRep2, strRep3 )
  97.     RepString3 = SubStituteString( RepString2(strIn, strRep1, StrRep2), "%3", strRep3)
  98. End Function
  99.  
  100. Function GenErrorPage (iCode, strSource, strDscp, strNote)
  101.     Dim strHTML
  102.     Const L_ErrCode_Text      = "<b>Error Code:</b>"
  103.     Const L_ErrDscp_Text      = "<b>Description:</b>"
  104.     Const L_ErrNote_Text      = "<b>Note:</b>"
  105.     Const L_ErrTitle_Text     = "Internet Printing Error"
  106.     Const L_ErrSource_Text    = "The error occurred in <b>%1</b>"
  107.     Const L_ErrOccurProc_Text = "<p>An <b>error</b> occurred processing your request.</p>"
  108.  
  109.     strHTML = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">"
  110.     strHTML = strHTML & "<html lang=" & L_Language & ">"
  111.     strHTML = strHTML & "<head>"
  112.     strHTML = strHTML & "<Meta Http-equiv=""Content-Type"" Content=""text/html; CHARSET=UTF-8"">"
  113.     strHTML = strHTML & "<title>" & L_ErrTitle_Text & "</title>"
  114.     strHTML = strHTML & "</head><body bgcolor=#FFFFFF>" & DEF_BASEFONT_TAG
  115.     strHTML = strHTML & L_ErrOccurProc_Text
  116.  
  117.     If strSource <> "" Then
  118.         strHTML = strHTML & RepString1(L_ErrSource_Text, strSource)
  119.     End If
  120.  
  121.     strHTML = strHTML & "<table>"
  122.  
  123.     strHTML = strHTML & "<tr><td>" & L_ErrCode_Text & "</td><td>" & (Hex (iCode)) & "</td></tr>"
  124.  
  125.     If strDscp <> "" Then
  126.         strHTML = strHTML & "<tr><td>" & L_ErrDscp_Text & "</td><td>" & strDscp & "</td></tr>"
  127.     End If
  128.  
  129.     If strNote <> "" Then
  130.         strHTML = strHTML & "<tr><td>" & L_ErrNote_Text & "</td><td>" & strNote & "</td></tr>"
  131.     End If
  132.  
  133.     strHTML = strHTML & "</table></body></html>"
  134.     GenErrorPage = strHTML
  135. End Function
  136.  
  137. Sub ErrorHandler(strNotes)
  138.     Dim strDscp, strSource
  139.  
  140.     Dim str401Error
  141.  
  142.     If Err.Number = 70 Or Err.Number = &H80070005 Then
  143.         Const L_ErrTitle_Text = "Internet Printing Authentication Error"
  144.         Const L_ErrTitle2_Text = "Authentication Failed"
  145.         Const L_ErrLine1_Text = "The error indicates that the action you chose requires a higher privilege than what you have with your account."
  146.         Const L_ErrLine2_Text = "Please contact your system administrator to verify that you have the privilege on the requested action."
  147.  
  148.         str401Error = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">" &_
  149.             "<html lang=" & L_Language & ">" &_
  150.             "<head>" &_
  151.             "<Meta Http-equiv=""Content-Type"" Content=""text/html; CHARSET=UTF-8"">" &_
  152.             "<title>" & L_ErrTitle_Text & "</title>" & "</head>" &_
  153.             "<body bgcolor=#FFFFFF>" &_
  154.             DEF_FONT_TAG &_
  155.             "<p><H2>" & L_ErrTitle2_Text & "</H2></p>" &_
  156.             "<p>" & L_ErrLine1_Text &_
  157.             "<br>" &_
  158.             "<br>" & L_ErrLine2_Text & "</p>" &_
  159.             "</font></body></html>"
  160.         response.write (Write(str401Error))
  161.         response.status = UNAUTHORIZED_401
  162.     Else
  163.         If Err.Number = &H80070709 Then
  164.             Const L_ErrInvalidName_Text = "Printer not found on server, unable to connect."
  165.             Err.Description = L_ErrInvalidName_Text
  166.         End If
  167.  
  168.         response.write(Write(GenErrorPage (Err.Number, Err.Source, Err.Description, strCleanString(strNotes))))
  169.     End If
  170.     response.Expires = 0
  171.     response.end
  172.  
  173. End Sub
  174.  
  175. Function bDHTMLSupported()
  176.     On Error Resume Next
  177.     Err.Clear
  178.     Dim objBrowcap
  179.  
  180.     Set objBrowcap = server.CreateObject("MSWC.browsertype")
  181.     If Not Err And objBrowcap.browser = "IE" And objBrowcap.majorver >= "4" Then
  182.         bDHTMLSupported = True
  183.     Else
  184.         bDHTMLSupported = False
  185.     End If
  186. End Function
  187.  
  188. Sub CheckSession()
  189.     ' check to see if the session has timed out
  190.     If Session(COMPUTER) = "" Then
  191.         response.redirect ("ipp_0003.asp")
  192.         response.end
  193.     End If
  194. End Sub
  195.  
  196. Function strPrinterStatus(iStatus)
  197.     Dim L_PrinterStatus_Text(24)
  198.     Const L_Seperator_Text = " - "
  199.     Const L_PrinterReady_Text = "Ready"
  200.  
  201.     L_PrinterStatus_Text(0)  = "Paused"
  202.     L_PrinterStatus_Text(1)  = "Error"
  203.     L_PrinterStatus_Text(2)  = "Deleting"
  204.     L_PrinterStatus_Text(3)  = "Paper Jam"
  205.     L_PrinterStatus_Text(4)  = "Out of Paper"
  206.     L_PrinterStatus_Text(5)  = "Manual Feed Required"
  207.     L_PrinterStatus_Text(6)  = "Paper Problem"
  208.     L_PrinterStatus_Text(7)  = "Printer Offline"
  209.     L_PrinterStatus_Text(8)  = "IO Active"
  210.     L_PrinterStatus_Text(9)  = "Busy"
  211.     L_PrinterStatus_Text(10) = "Printing"
  212.     L_PrinterStatus_Text(11) = "Output Bin Full"
  213.     L_PrinterStatus_Text(12) = "Not Available"
  214.     L_PrinterStatus_Text(13) = "Waiting"
  215.     L_PrinterStatus_Text(14) = "Processing"
  216.     L_PrinterStatus_Text(15) = "Initializing"
  217.     L_PrinterStatus_Text(16) = "Warming Up"
  218.     L_PrinterStatus_Text(17) = "Toner Low"
  219.     L_PrinterStatus_Text(18) = "No Toner"
  220.     L_PrinterStatus_Text(19) = "Page Punt"
  221.     L_PrinterStatus_Text(20) = "User Intervention Required"
  222.     L_PrinterStatus_Text(21) = "Out of Memory"
  223.     L_PrinterStatus_Text(22) = "Door Open"
  224.     L_PrinterStatus_Text(23) = "Server Status Unknown"
  225.     L_PrinterStatus_Text(24) = "Power Save Mode"
  226.  
  227.     Dim bit, i
  228.     bit = 1
  229.     i = 0
  230.     Dim strHTML, bFirst
  231.  
  232.     bFirst = True
  233.     strHTML = ""
  234.  
  235.     For i = 0 To 24
  236.     If iStatus And bit Then
  237.         If Not bFirst Then
  238.         strHTML = strHTML + L_Seperator_Text
  239.         End If
  240.         strHTML = strHTML + L_PrinterStatus_Text(i)
  241.             bFirst = False
  242.     End If
  243.         bit = bit * 2
  244.     Next
  245.     If bFirst Then
  246.         strHTML = "<font color=green>" & L_PrinterReady_Text & "</font>"
  247.     Else
  248.         strHTML = "<font color=red>" & strHTML & "</font>"
  249.     End If
  250.  
  251.     strPrinterStatus = strHTML
  252. End Function
  253.  
  254. Function strFormatJobSize(iJobSize)
  255.     Const  L_Bytes_Text     = "%1 bytes"
  256.     Const  L_KiloBytes_Text = "%1 Kb"
  257.     Const  L_MegaBytes_Text = "%1 Mb"
  258.     
  259.  
  260.     If iJobSize < 1024 Then
  261.         strFormatJobSize = RepString1(L_Bytes_Text, CStr(iJobSize) )
  262.     ElseIf iJobSize < 1048576 Then
  263.         strFormatJobSize = RepString1(L_KiloBytes_Text, formatnumber(iJobSize / 1024, 1) )
  264.     Else
  265.         strFormatJobSize = RepString1(L_MegaBytes_Text, formatnumber(iJobSize / (1024 * 1024), 1) )
  266.     End If
  267. End Function
  268.  
  269. Function strFormatString(str)
  270.     If str = "" Then
  271.         strFormatString = " "
  272.     Else
  273.         strFormatString = str
  274.     End If
  275. End Function
  276.  
  277. Function strCleanString (str)
  278.  
  279.     Dim strClean, i, iLength, ch
  280.  
  281.     strClean = ""
  282.     iLength = Len (str)
  283.  
  284.     For i = 1 To iLength
  285.         ch = Mid (str, i, 1)
  286.  
  287.         Select Case ch
  288.         Case "<"
  289.             strClean = strClean & "<"
  290.         Case ">"
  291.             strClean = strClean & ">"
  292.         Case """"
  293.             strClean = strClean & """
  294.         Case "&"
  295.             strClean = strClean & "&"
  296.         Case Else
  297.             strClean = strClean & ch
  298.         End Select
  299.     Next
  300.     strCleanString = strClean
  301.  
  302. End Function
  303.  
  304. Function strCleanRequest (str)
  305.  
  306.     strCleanRequest = strCleanString (Request(str))
  307.  
  308. End Function
  309.  
  310. Function JobEtaInfo (objPrinter)
  311.     Dim strTime, iJobCount, iMinute
  312.     Dim strHTML
  313.  
  314.     Const L_NoJobPending_Text = "    <b>Waiting Time:</b> 0 <br><b>Pending Documents:</b> 0 "
  315.     Const L_ErrorNoJobCompletion_Text = "<font color=red>Error in printing</font> "
  316.     Const L_LongHour_Text = "> 8 hr"
  317.     Const L_About_Text = "about "
  318.     Const L_Hour_Text = " hr"
  319.     Const L_Minute_Text = " min"
  320.  
  321.     Const L_QueueStatus_Text = "<b>Printer Queue:</b> "
  322.     Const L_WaitingTime_Text = "      <b>Waiting Time:</b> "
  323.     Const L_Unknown_Text = "Unknown"
  324.     Const L_JobPending_Text = "<b>Pending Documents:</b> "
  325.     Const L_AvgSize_Text = "      <b>Average size:</b> "
  326.     Const L_Pages_Text =  " page(s)"
  327.  
  328.  
  329.     strHTML = L_QueueStatus_Text & strPrinterStatus (objPrinter.Status) & L_WaitingTime_Text
  330.  
  331.     objPrinter.CalcJobETA
  332.  
  333.     If ( objPrinter.Status And &H9F ) Then
  334.         strHTML = strHTML & L_Unknown_Text
  335.     'End If
  336.     'If 1 Then
  337.     Else
  338.         If objPrinter.PendingJobCount = 0 Then
  339.             strHTML = strHTML & "0"
  340.         Else
  341.             iMinute = objPrinter.JobCompletionMinute
  342.             'iMinute = 240  'For testing purpose
  343.             If iMinute <> -1 Then
  344.                 If iMinute > 480 Then
  345.                     strTime = L_LongHour_Text
  346.                 Elseif iMinute > 60 Then
  347.                     strTime = L_About_Text & CStr (Int (iMinute / 60)) & L_Hour_Text
  348.                 Else
  349.                     strTime = L_About_Text & CStr (iMinute) & L_Minute_Text
  350.                 End If
  351.                 strHTML = strHTML & strTime
  352.             Else
  353.                 strHTML = strHTML & L_Unknown_Text
  354.             End If
  355.         End If
  356.     End If
  357.  
  358.     strHTML = strHTML & "<br>"
  359.     iJobCount = objPrinter.PendingJobCount
  360.     strHTML = strHTML & L_JobPending_Text & CStr (iJobCount)
  361.  
  362.     If iJobCount > 0 Then
  363.         strHTML = strHTML & L_AvgSize_Text
  364.         If ObjPrinter.AvgJobSizeUnit = 1 Then 'Page
  365.             strHTML = strHTML & CStr (ObjPrinter.AvgJobSize) + L_Pages_Text
  366.         Else
  367.             strHTML = strHTML & strFormatJobSize(ObjPrinter.AvgJobSize)
  368.         End If
  369.     End If
  370.  
  371.     JobEtaInfo = "<font " & DEF_FONT & "size= -1>" & strHTML & "</font>"
  372.  
  373. End Function
  374.  
  375. Function GetFriendlyName (strPrtName, strComputer)
  376.  
  377.     Dim lOffset, strServerName
  378.  
  379.     If Left (strPrtName, 2) = "\\" Then
  380.         lOffset = InStr (3, strPrtName, "\")
  381.         strServerName = Mid (strPrtName, 3, lOffset - 3)
  382.         If strServerName = strComputer Then 'Cut the server name only if it is same as the computer name
  383.             strPrtName = Mid (strPrtName, lOffset + 1)
  384.         End If
  385.     End If
  386.     GetFriendlyName = strPrtName
  387.  
  388. End Function
  389.  
  390. %>
  391.